//
// Created by ChaoDONG on 2021-03-17.
//

/* intconv.c -- some mismatched integer conversions */
#include <stdio.h>

#define PAGES 336

#define WORDS 65618

int main(void){

    short num = PAGES;

    short mnum = -PAGES;

    printf("num as short and unsigned short: %hd %hu\n",
           num,num);
    /* 请看输出的第1行，num变量对应的转换说明%hd和%hu输出的结果都是336  */

    printf("-num as short and unsigned short: %hd %hu\n",
           mnum,mnum);
    /*  第2行mnum变量对应的转换说明%u（无符号）输出的结果却为65200，
     * 并非期望的336。这是由于有符号short int类型
    的值在我们的参考系统中的表示方式所致。  */

    printf("num as int and char: %d %c\n",
           num, num);
    /* 第3行演示了如果把一个大于255的值转换成字符会发生什么情况。在我
    们的系统中，short int是2字节，char是1字节。当printf()使用%c打印336时，
    它只会查看储存336的2字节中的后1字节。这种截断（见图4.8）相当于用一
    个整数除以256，只保留其余数。 */


    printf("WORDS as int, short, and char: %d %hd %c\n",
           WORDS, WORDS, WORDS);

    return 0;
}